/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

/**
 *
 * @author Administrator
 */
public class Calificaciones {
    private double notaCalificacion;
    private String estadoCalificacion, nombreCurso, nombreEvaluacion,
            nombreTipoEvaluacion, fechaRegistroEvaluacion;

    /**
     * @return the notaCalificacion
     */
    public double getNotaCalificacion() {
        return notaCalificacion;
    }

    /**
     * @param notaCalificacion the notaCalificacion to set
     */
    public void setNotaCalificacion(double notaCalificacion) {
        this.notaCalificacion = notaCalificacion;
    }

    /**
     * @return the estadoCalificacion
     */
    public String getEstadoCalificacion() {
        return estadoCalificacion;
    }

    /**
     * @param estadoCalificacion the estadoCalificacion to set
     */
    public void setEstadoCalificacion(String estadoCalificacion) {
        this.estadoCalificacion = estadoCalificacion;
    }

    /**
     * @return the nombreCurso
     */
    public String getNombreCurso() {
        return nombreCurso;
    }

    /**
     * @param nombreCurso the nombreCurso to set
     */
    public void setNombreCurso(String nombreCurso) {
        this.nombreCurso = nombreCurso;
    }

    /**
     * @return the nombreEvaluacion
     */
    public String getNombreEvaluacion() {
        return nombreEvaluacion;
    }

    /**
     * @param nombreEvaluacion the nombreEvaluacion to set
     */
    public void setNombreEvaluacion(String nombreEvaluacion) {
        this.nombreEvaluacion = nombreEvaluacion;
    }

    /**
     * @return the nombreTipoEvaluacion
     */
    public String getNombreTipoEvaluacion() {
        return nombreTipoEvaluacion;
    }

    /**
     * @param nombreTipoEvaluacion the nombreTipoEvaluacion to set
     */
    public void setNombreTipoEvaluacion(String nombreTipoEvaluacion) {
        this.nombreTipoEvaluacion = nombreTipoEvaluacion;
    }

    /**
     * @return the fechaRegistroEvaluacion
     */
    public String getFechaRegistroEvaluacion() {
        return fechaRegistroEvaluacion;
    }

    /**
     * @param fechaRegistroEvaluacion the fechaRegistroEvaluacion to set
     */
    public void setFechaRegistroEvaluacion(String fechaRegistroEvaluacion) {
        this.fechaRegistroEvaluacion = fechaRegistroEvaluacion;
    }

public static Vector<Calificaciones> CalificacionesAlumnoSegunCodigoFechaDesdeFechaHasta(int codPersona,String fechaDesde, String fechaHasta){
        Vector<Calificaciones> LCalificaciones = new Vector<Calificaciones>();
        Calificaciones oCalificacion = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT C.nota AS NOTA, " +
                "CASE WHEN C.NOTA < 11 THEN 'DESAPROBADO' " +
                "ELSE 'APROBADO' END AS ESTADO , " +
                "CR.nombre AS NOMBRECURSO, E.nombre AS NOMBREEVALUACION, TE.nombre AS NOMBRETIPOEVALUACION, to_char(EP.fecha_registro, 'DD/MM/YYYY')  " +
                "FROM MATRICULA M " +
                "LEFT JOIN calificacion C ON M.cod_matricula = C.cod_matricula " +
                "INNER JOIN CURSO CR ON CR.cod_curso = C.cod_curso " +
                "INNER JOIN evaluacion_programada EP ON EP.codevaluacionprog =  C.codevaluacionprog " +
                "INNER JOIN evaluacion E ON E.codevaluacion = EP.codevaluacion " +
                "INNER JOIN tipo_evaluacion TE ON TE.codtipoevaluacion = EP.codtipoevaluacion " +
                "WHERE M.cod_persona = ?  " +
                "AND EP.fecha_registro BETWEEN to_date(?, 'DD/MM/YYYY') " +
                "AND to_date(?, 'DD/MM/YYYY') " +
                "AND EP.fecha_registro < CURRENT_DATE " +
                "ORDER BY EP.FECHA_REGISTRO" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersona);
            ps.setString(2, fechaDesde);
            ps.setString(3, fechaHasta);
            rs = ps.executeQuery();
            while(rs.next()){
                oCalificacion = new Calificaciones();
                oCalificacion.setNotaCalificacion(rs.getDouble(1));
                oCalificacion.setEstadoCalificacion(rs.getString(2));
                oCalificacion.setNombreCurso(rs.getString(3));
                oCalificacion.setNombreEvaluacion(rs.getString(4));
                oCalificacion.setNombreTipoEvaluacion(rs.getString(5));
                oCalificacion.setFechaRegistroEvaluacion(rs.getString(6));
                LCalificaciones.add(oCalificacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LCalificaciones;
    }

public static Vector<Calificaciones> EvaluacionesProgramadasAlumnoSegunCodigoFechaDesdeFechaHasta(int codPersona,String fechaDesde, String fechaHasta){
        Vector<Calificaciones> LCalificaciones = new Vector<Calificaciones>();
        Calificaciones oCalificacion = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT CR.nombre AS NOMBRECURSO, E.nombre AS NOMBREEVALUACION, TE.nombre AS NOMBRETIPOEVALUACION, " +
                "EP.fecha_registro " +
                "FROM MATRICULA M " +
                "INNER JOIN calificacion C ON M.cod_matricula = C.cod_matricula " +
                "INNER JOIN CURSO CR ON CR.cod_curso = C.cod_curso " +
                "INNER JOIN evaluacion_programada EP ON EP.codevaluacionprog =  C.codevaluacionprog " +
                "INNER JOIN evaluacion E ON E.codevaluacion = EP.codevaluacion " +
                "INNER JOIN tipo_evaluacion TE ON TE.codtipoevaluacion = EP.codtipoevaluacion " +
                "WHERE M.cod_persona = ?  " +
                "AND EP.fecha_registro BETWEEN to_date(?, 'DD/MM/YYYY') " +
                "AND to_date(?, 'DD/MM/YYYY') " +
                "ORDER BY EP.FECHA_REGISTRO" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersona);
            ps.setString(2, fechaDesde);
            ps.setString(3, fechaHasta);
            rs = ps.executeQuery();
            while(rs.next()){
                oCalificacion = new Calificaciones();                
                oCalificacion.setNombreCurso(rs.getString(1));
                oCalificacion.setNombreEvaluacion(rs.getString(2));
                oCalificacion.setNombreTipoEvaluacion(rs.getString(3));
                oCalificacion.setFechaRegistroEvaluacion(rs.getString(4));
                LCalificaciones.add(oCalificacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LCalificaciones;
    }
public static List<Calificaciones> CalificacionesPorCursoSegunAlumno(int codMatricula, int codCurso){
        List<Calificaciones> LCalificaciones = new ArrayList<Calificaciones>();
        Calificaciones oCalificacion = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT C.nota AS NOTA, " +
                "CASE WHEN C.NOTA < 11 " +
                "THEN 'DESAPROBADO' " +
                "ELSE 'APROBADO' END AS ESTADO , " +
                "CR.nombre AS NOMBRECURSO, E.nombre AS NOMBREEVALUACION, TE.nombre AS NOMBRETIPOEVALUACION, TO_CHAR(EP.fecha_registro, 'DD/MM/YYYY') " +
                "FROM MATRICULA M " +
                "LEFT JOIN calificacion C ON M.cod_matricula = C.cod_matricula " +
                "INNER JOIN CURSO CR ON CR.cod_curso = C.cod_curso " +
                "INNER JOIN evaluacion_programada EP ON EP.codevaluacionprog =  C.codevaluacionprog " +
                "INNER JOIN evaluacion E ON E.codevaluacion = EP.codevaluacion " +
                "INNER JOIN tipo_evaluacion TE ON TE.codtipoevaluacion = EP.codtipoevaluacion " +
                "WHERE c.cod_matricula = ? and c.cod_curso = ? " +
                "ORDER BY EP.FECHA_REGISTRO" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codMatricula);
            ps.setInt(2, codCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                oCalificacion = new Calificaciones();
                oCalificacion.setNotaCalificacion(rs.getDouble(1));
                oCalificacion.setEstadoCalificacion(rs.getString(2));
                oCalificacion.setNombreCurso(rs.getString(3));
                oCalificacion.setNombreEvaluacion(rs.getString(4));
                oCalificacion.setNombreTipoEvaluacion(rs.getString(5));
                oCalificacion.setFechaRegistroEvaluacion(rs.getString(6));
                LCalificaciones.add(oCalificacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LCalificaciones;
    }

     public static Calificaciones nombreCursoPorCodigo(int codCurso){
        Calificaciones oCalificacion = new Calificaciones();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT C.nombre " +
                "FROM CURSO C " +
                "WHERE C.cod_curso = ? " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                
                oCalificacion.setNombreCurso(rs.getString(1));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return oCalificacion;
    }

}
